#include <bits/stdc++.h>
#define inf INT_MAX
#define longlonginf LONG_LONG_MAX
#define mod 1000000007
#define MAXN 100005
#define pii pair<ll,ll>
#define ll long long
#define deb(x) cerr<<"[ "<<#x<<" = "<<x<<" ]";
#define yes() cout<<"YES\n";
#define no() cout<<"NO\n";
using namespace std;
ll n,m,cur,q,k,x,y,z;
ll ans = 0;
string subtask;
void solve(){
ll w,h,tw,th;
cin>>w>>h>>tw>>th>>n;
ll a[n];
for(int i = 0 ; i < n ; i++){
cin>>a[i];
}
if( ( w <= tw && h <= th ) || ( w <= th && h <= tw ) ) {
cout<<0<<"\n";
return;
}
sort(a,a+n,greater<ll>());
for(int i = 0 ; i < min(n,(ll)34) ; i++){
vector<ll> v1,v2;
ll t1 = (i+1)/2;
ll t2 = i+1 - t1;
//generate v1
for(ll j = 0; j < (1<<t1) ; j++){
x = 1;
for(ll k = 0 ; k < 20 ; k++){
if( (1<<k) & j ) x *= a[k];
}
v1.push_back(x);
}
//generate v2
for(ll j = 0; j < (1<<t2) ; j++){
x = 1;
for(ll k = 0 ; k < 20 ; k++){
if( (1<<k) & j ) x *= a[k+t1];
}
v2.push_back(x);
}
//merge
sort(v2.begin(),v2.end());
//~ for(auto u : v1) cout<<u<<" ";
//~ cout<<"\n";
//~ for(auto u : v2) cout<<u<<" ";
//~ cout<<"\n";a
vector<ll>::iterator it;
ll total = *(v2.end()-1);
ll total2 = *max_element(v1.begin(),v1.end());
for(auto u : v1){
//no flip
bool good1 = 1, good2 = 1;
ll foo = (w+u*tw-1)/(u*tw);
it = lower_bound(v2.begin(),v2.end(),foo);
if( it == v2.end() ){
good1 = 0;
}
else{
ll p = (total2/u)*(total/(*it));
if(!(u*(*it)*tw >= w && p*th >= h) ) good1 = 0;
}
//flip
foo = (h+u*tw-1)/(u*tw);
it = lower_bound(v2.begin(),v2.end(),foo);
if( it == v2.end() ){
good2 = 0;
}
else{
ll p = (total2/u)*(total/(*it));
if(!(u*(*it)*tw >= h && p*th >= w) ) good2 = 0;
}
//check
if( good1 || good2 ){
cout<<i+1<<"\n";
return;
}
}
}
cout<<-1<<"\n";
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T = 1;
//cin>>T;
for(int i = 0 ; i < T ; i++){
//cout<<"Case #"<<i+1<<": ";
solve();
}
return 0;
}
/*
you thought u declared it huh?
not i but x
logical operator
wrong example/proof
thoroughly
wrong variables
thinking it wrong
bruh just try some test case
capitals ;-;
wrong data structure lol
count memory usement
corner case
oversized array
orders
statements
size initializer
while con
map -> array
wrong digits??
swapped variables??
check if theres any variabled
that got declared twice
find some pattern
name collision
constraints??!
mod !!
resets
*/
1351. Count Negative Numbers in a Sorted Matrix | 617. Merge Two Binary Trees |
1450. Number of Students Doing Homework at a Given Time | 700. Search in a Binary Search Tree |
590. N-ary Tree Postorder Traversal | 589. N-ary Tree Preorder Traversal |
1299. Replace Elements with Greatest Element on Right Side | 1768. Merge Strings Alternately |
561. Array Partition I | 1374. Generate a String With Characters That Have Odd Counts |
1822. Sign of the Product of an Array | 1464. Maximum Product of Two Elements in an Array |
1323. Maximum 69 Number | 832. Flipping an Image |
1295. Find Numbers with Even Number of Digits | 1704. Determine if String Halves Are Alike |
1732. Find the Highest Altitude | 709. To Lower Case |
1688. Count of Matches in Tournament | 1684. Count the Number of Consistent Strings |
1588. Sum of All Odd Length Subarrays | 1662. Check If Two String Arrays are Equivalent |
1832. Check if the Sentence Is Pangram | 1678. Goal Parser Interpretation |
1389. Create Target Array in the Given Order | 1313. Decompress Run-Length Encoded List |
1281. Subtract the Product and Sum of Digits of an Integer | 1342. Number of Steps to Reduce a Number to Zero |
1528. Shuffle String | 1365. How Many Numbers Are Smaller Than the Current Number |